#!/bin/bash

set -e

# 确定需要管理的工具链
ARM_TOOLCHAIN="arm-linux-gnueabi"
ARMHF_TOOLCHAIN="arm-linux-gnueabihf"
AARCH64_TOOLCHAIN="aarch64-linux-gnu"

# 函数：检查工具链是否已经安装
function check_installed {
    TOOLCHAIN=$1
    if command -v ${TOOLCHAIN}-gcc &> /dev/null; then
        echo "$TOOLCHAIN 已安装"
        return 0
    else
        echo "$TOOLCHAIN 未安装"
        return 1
    fi
}

# 函数：编译C代码
function compile_code {
    TOOLCHAIN=$1
    OUTPUT_FILE=$2
    echo "正在为 $TOOLCHAIN 编译..."
    $TOOLCHAIN-gcc hello.c -o $OUTPUT_FILE
}

# 函数：删除生成的二进制文件
function delete_binaries {
    echo "删除生成的二进制文件..."
    rm -f hello_aarch64 hello_arm hello_armhf
    echo "二进制文件已删除。"
}

# 检查是否传入clean参数
if [ "$1" == "clean" ]; then
    delete_binaries
    echo "清理完成。"
    exit 0
fi

# 更新包列表
echo "正在更新包列表..."
sudo apt-get update

# 检查并显示已安装的工具链
echo "检查已安装的工具链..."
INSTALLED_TOOLCHAINS=()
if check_installed $ARM_TOOLCHAIN; then
    INSTALLED_TOOLCHAINS+=($ARM_TOOLCHAIN)
fi
if check_installed $ARMHF_TOOLCHAIN; then
    INSTALLED_TOOLCHAINS+=($ARMHF_TOOLCHAIN)
fi
if check_installed $AARCH64_TOOLCHAIN; then
    INSTALLED_TOOLCHAINS+=($AARCH64_TOOLCHAIN)
fi

# 如果没有安装任何工具链，退出脚本
if [ ${#INSTALLED_TOOLCHAINS[@]} -eq 0 ]; then
    echo "未发现已安装的工具链，脚本终止。"
    exit 1
fi

# 创建测试的 "Hello, ARM!" C 代码
cat > hello.c << EOF
#include <stdio.h>

int main() {
    printf("Hello, ARM!\n");
    return 0;
}
EOF

# 编译C代码为不同架构的二进制文件
compile_code $ARM_TOOLCHAIN hello_arm
compile_code $ARMHF_TOOLCHAIN hello_armhf
compile_code $AARCH64_TOOLCHAIN hello_aarch64

echo "编译完成！以下是生成的二进制文件："
ls -lh hello_aarch64 hello_arm hello_armhf

# 提示用户是否要删除生成的二进制文件
read -p "是否要删除生成的二进制文件？(y/N): " -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
    delete_binaries
else
    echo "二进制文件保留。"
fi

# 清理源码文件
rm hello.c

echo "脚本执行完成。"
